package com.team.mp.util;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.Bucket;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class AliOssUtil {
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    private static final String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
    private static final String accessKeyId = "LTAI5tM1kdcVRgR73UjpETxM";
    private static final String accessKeySecret = "mYxdY9kC5XCXCi2CTOp6qpU4nfuh8v";
    private static OSS client;
    public static final String BUCKETNAME = "javadata168";

    static {
        client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }

    /**
     * 创建存储空间
     *
     * @param name 存储空间的名称
     */
    public static void createBucket(String name) {
        Bucket bucket = client.createBucket(name);
    }

    /**
     * 上传文件
     */
    public static void upload(String objname, InputStream data) {
        client.putObject("javadata168", objname, data);
    }

    /**
     * 上传文件
     *
     * @param objname 对象名，文件名 要求唯一
     * @param data    上传的内容，字节数组的形式
     */
    public static void upload(String objname, byte[] data) {
        upload(objname, new ByteArrayInputStream(data));
    }

    /**
     * 获取访问名称
     *
     * @param objname 对象名
     * @param year    访问链接的有效器
     */
    public static String getPath(String objname, int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR, year);
        return client.generatePresignedUrl(BUCKETNAME, objname, calendar.getTime()).toString();
    }

    public static String getPath(String objname, Date date) {
        return client.generatePresignedUrl(BUCKETNAME, objname, date).toString();
    }

    /**
     * 获取存储空间中的对象名
     */
    public static List<String> getFileList() {
        ObjectListing listing = client.listObjects(BUCKETNAME);
        List<String> names = new ArrayList<>();
        for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
            names.add(objectSummary.getKey());
        }
        return names;
    }

    /**
     * 删除文件
     *
     * @param objname 对象名
     */
    public static void delFile(String objname) {
        client.deleteObject("javadata168", objname);
    }

}
